home *** CD-ROM | disk | FTP | other *** search
- /*
- File: CAProxyPartExt.cpp
-
- Contains: ProxyPart methods for the part extension API. CAProxyPart is
- a special instance of a root/container part for interface with
- a "traditional" app via CALib.
-
- Written by: Steve Foley
-
- Change History (most recent first):
-
- <2> 11/18/95 RB Major strip down. Removed EXTN_Update(),
- EXTN_GetLastEventInfo()
-
- <1> 6/15-6/30 RB Major rewrite.
-
- ------------------------------------------------------------------------------
-
- <9> 5/15/95 RB Adding EXTN_InstallCAFrameShapeHandler,
- EXTN_InstallCAFrameAddedHandler,
- and EXTN_InstallCAEventInEmbeddedHandler
- <8> 5/08/95 SJF Fallout from checkin screwup
- <7> 5/06/95 SJF Cleanup Drag & Drop
- <4> 5/3/95 SJF Put code in ReleaseExtension
- <3> 4/23/95 RB Adding EXTN_InstallFocusHandlers()
- <2> 4/01/95 RB Adding EXTN_InstallWindowActivateHandler()
- <1> 3/15/95 SJF first checked in
- <0> 3/9/94 SJF first split out from CAProxyPartStubs.cpp,
- Added methods to support extension
-
- To Do:
- */
-
- #ifndef _EXCEPT_
- #include <Except.h>
- #endif
-
- #ifndef _CAPROXYPART_
- #include "CAProxyPart.h"
- #endif
-
- #ifndef _CAPROXYPARTDEF_
- #include "CAProxyPartDef.h"
- #endif
-
- #ifndef _CAPROXYDEBUG_
- #include "CAProxyDebug.h"
- #endif
-
- #ifndef SOM_ODWindow_xh
- #include <Window.xh>
- #endif
-
- #ifndef _ISOSTR_
- #include <ISOStr.h>
- #endif
-
- #ifndef SOM_ODDraft_xh
- #include <Draft.xh>
- #endif
-
- #ifndef _ODUTILS_
- #include <ODUtils.h>
- #endif
-
- #ifndef _STORUTIL_
- #include <StorUtil.h>
- #endif
-
- #ifndef _PLFMDEF_
- #include <PlfmDef.h>
- #endif
-
- #ifndef SOM_ODFrFaItr_xh
- #include <FrFaItr.xh>
- #endif
-
- #ifndef _ORDCOLL_
- #include <OrdColl.h>
- #endif
-
- #ifndef SOM_ODFacet_xh
- #include <Facet.xh>
- #endif
-
- #ifndef SOM_ODFrame_xh
- #include <Frame.xh>
- #endif
-
- #ifndef SOM_ODFacetItr_xh
- #include <FacetItr.xh>
- #endif
-
- #ifndef SOM_Module_OpenDoc_StdProps_defined
- #include <StdProps.xh>
- #endif
-
-
- #ifdef USE_CA_SEGMENTS
- #pragma segment CAProxyPart
- #endif
-
-
- //-------------------------------------------------------------------------
- // ProxyPart extension interface
- //-------------------------------------------------------------------------
-
-
-
- void CAProxyPart::ReleaseExtension(Environment* ev, ODExtension* extension)
- {
-
- //if (extension->GetRefCount(ev) != 0) DebugStr ("\pExtension refcount problem");
- //ODDeleteObject (extension);
- //fProxyExt = kODNULL;
-
- }
-
-
-
- ODExtension* CAProxyPart::AcquireExtension(Environment* ev, ODType extensionName)
- {
- ODExtension* pTheExt = kODNULL;
-
- // If we are called with an extension type we don't support,
- // we should be returning an error here.
-
- if (!ODISOStrCompare((ODISOStr)extensionName, kCAProxyPartExtension))
- {
- if (fProxyExt) fProxyExt->Acquire(ev);
- else
- {
- fProxyExt = new CAProxyExtension;
- fProxyExt->InitProxyExtension( ev, fSelf, this );
- }
-
- pTheExt = (ODExtension*)fProxyExt;
-
- }
- else
- {
- ev->_major = kODErrUnsupportedExtension;
- pTheExt = kODNULL;
- }
- return pTheExt;
- }
-
-
- // Drag & Drop callback registry for CAProxyPart <==> CALib
-
- ODBoolean CAProxyPart::HasExtension(Environment* ev, ODType extensionName)
- {
-
- ODUnused(ev);
- // ODISOStrCompare returns zero if the strings match...
- if (!ODISOStrCompare((ODISOStr)extensionName, kCAProxyPartExtension))
- return kODTrue;
- else
-
- return kODFalse;
- }
-
-
- OSErr CAProxyPart::EXTN_SetDragTrackingHandler( Environment* ev,
- DragTrackingHandler trackingHandler,
- void* handlerRefCon)
- {
- // Installs a TrackingHandler for OpenDoc
- //
- // Exceptions signalled:
- // kCAErrExistingHandler
-
- OSErr theErr = kODNoError;
-
- if (fCADnDTrackHnd)
- theErr = kCAErrExistingHandler;
- else
- {
- fCADnDTrackHnd = trackingHandler;
- fTrackRefCon = handlerRefCon;
- }
- ODUnused( ev );
-
- return theErr;
- }
-
-
-
-
- OSErr CAProxyPart::EXTN_SetDragReceiveHandler( Environment* ev,
- DragReceiveHandler trackingHandler,
- void* handlerRefCon)
- {
- // Installs a Receive Handler
- //
- // Exceptions signalled:
- // kCAErrExisting Handler
-
- OSErr theErr = kODNoError;
-
- if (fCADnDReceiveHnd)
- theErr = kCAErrExistingHandler;
- else
- {
- fCADnDReceiveHnd = trackingHandler;
- fReceiveRefCon = handlerRefCon;
- }
- ODUnused( ev );
-
- return theErr;
- }
-
-
-
- //--------------------------------------------------------------------
-
- void CAProxyPart::EXTN_InstallCAWindowActivateHandler( Environment* ev,
- CAWindowActivateHandlerUPP theHandler)
- {
- ODUnused( ev );
-
- fCAWindowActivateHandler = theHandler;
- }
-
- //--------------------------------------------------------------------
- void CAProxyPart::EXTN_InstallCAFocusHandlers( Environment* ev,
- CAFocusAcquiredProcUPP aquiredHandler,
- CAFocusLostProcUPP lostHandler,
- CADocumentRef docRef)
- {
- ODUnused( ev );
-
- fCAFocusAquiredHandler = aquiredHandler;
- fCAFocusLostHandler = lostHandler;
- fCADocumentRef = docRef;
-
- }
-
- //--------------------------------------------------------------------
- void CAProxyPart::EXTN_InstallCAAdjustBorderHandler( Environment* ev,
- CAProxyHookAdjustBorder theHook,
- CAAdjustBorderProc theHandler)
- {
- ODUnused( ev );
-
- if ((theHook == kODNULL) || (theHandler == kODNULL))
- {
- DebugStr ("\pEXTN_InstallCAAdjustBorderHandler - NULL handler routines!");
- }
-
- fCAAdjustBorderHook = theHook;
- fCAAdjustBorderHandler = theHandler;
-
- }
-
- //--------------------------------------------------------------------
- void CAProxyPart::EXTN_AddFrame( Environment* ev,
- ODFrame* theFrame)
- {
-
- CFrameInfo* frameInfo;
-
- frameInfo = new CFrameInfo (ev, theFrame->GetID(ev), theFrame->GetStorageUnit(ev)->GetDraft(ev));
- frameInfo->Internalize();
- frameInfo->Externalize(fSelf->GetStorageUnit(ev));
- fEmbeddedFrames->AddLast(frameInfo);
- this->UTIL_SetDirty (ev);
-
- }
-
-
-
-
- //--------------------------------------------------------------------
- void CAProxyPart::EXTN_RemoveFrame( Environment* ev,
- ODFrame* theFrame)
- {
-
- ODFrame* rootFrame = kODNULL;
- CFrameInfo* frameInfo;
- ODFacetIterator* facets;
- ODFacet* containingFacet;
- ODFacet* facet;
- ODFacet* childFacet;
- ODStorageUnit* storageUnit = fSelf->GetStorageUnit(ev);
- OrderedCollection* facetColl;
- OrderedCollectionIterator* iter;
-
- frameInfo = this->UTIL_FindFrameInfoForFrame (ev, theFrame);
- rootFrame = fDisplayFrame->GetFrame();
-
- SOM_TRY
-
-
- facetColl = new OrderedCollection;
-
- ODFrameFacetIterator* rootFacets = rootFrame->CreateFacetIterator(ev);
- for (containingFacet = rootFacets->First(ev);
- rootFacets->IsNotComplete(ev);
- containingFacet = rootFacets->Next(ev))
- {
-
- facets = containingFacet->CreateFacetIterator(ev, kODChildrenOnly, kODFrontToBack);
- for (facet = facets->First(ev);
- facets->IsNotComplete(ev);
- facet = facets->Next(ev))
- {
- if ( facet->GetFrame(ev) == theFrame )
- facetColl->AddLast(facet);
- }
- ODDeleteObject (facets);
-
- iter = facetColl->CreateIterator();
- for (childFacet = (ODFacet*) iter->First(); iter->IsNotComplete();
- childFacet = (ODFacet*) iter->Next())
- {
- containingFacet = childFacet->GetContainingFacet(ev);
- containingFacet->RemoveFacet (ev, childFacet);
- ODDeleteObject(childFacet);
-
- }
-
- ODDeleteObject (iter);
- ODDeleteObject (facetColl);
-
- }
-
- if (frameInfo)
- {
-
- ODSize streamSize;
- ODStorageUnitRef suRef, tempRef;
- ODSize offset;
-
- // Remove the frame from our internal list
- fEmbeddedFrames->Remove(frameInfo);
-
- // Remove the SU ref from the kODPropEmebeddedFrames property
-
- ODSUExistsThenFocus (ev, storageUnit, kCAPropEmbeddedFrames, kODStrongStorageUnitRefs);
- storageUnit->GetStrongStorageUnitRef(ev, frameInfo->GetID(), suRef);
- streamSize = storageUnit->GetSize(ev);
-
- TRACE (3, "Removing frame %d, ref %x, streamsize = %d", frameInfo->GetID(),
- suRef, streamSize);
-
- storageUnit->RemoveStorageUnitRef (ev, suRef);
-
- // Now remove the suRef from the value stream
-
- storageUnit->SetOffset (ev, 0);
-
- while (offset < streamSize)
- {
- offset = storageUnit->GetOffset (ev);
- StorageUnitGetValue(storageUnit, ev, kODStorageUnitRefLen, tempRef);
-
- if (*tempRef == *suRef)
- {
- TRACE (3, "Deleteing the ref from the stream at offset %d", offset);
- storageUnit->SetOffset (ev, offset);
- storageUnit->DeleteValue (ev, kODStorageUnitRefLen);
- break;
- }
-
- offset = storageUnit->GetOffset (ev);
- }
-
- streamSize = storageUnit->GetSize(ev);
- TRACE (3, "After Remove streamsize = %d", streamSize);
-
- // this releases theFrame
- ODDeleteObject (frameInfo);
-
- this->UTIL_SetDirty (ev);
-
- }
-
- SOM_ENDTRY
-
- }
- //--------------------------------------------------------------------
- void CAProxyPart::EXTN_InstallCAFrameShapeRequestHandler( Environment* ev,
- CAProxyHookFrameShapeRequest theHook,
- CAFrameShapeRequestHandler theHandler)
- {
- ODUnused( ev );
-
- if ((theHook == kODNULL) || (theHandler == kODNULL))
- {
- DebugStr ("\pEXTN_InstallCAFrameShapeRequestHandler - NULL handler routines!");
- }
-
- fCAFrameShapeRequestHook = theHook;
- fCAFrameShapeRequestHandler = theHandler;
-
- }
-
- //--------------------------------------------------------------------
- void CAProxyPart::EXTN_InstallCACanvasUpdatedHandler( Environment* ev,
- CACanvasUpdatedProcUPP theHandler)
- {
- ODUnused( ev );
-
- if (theHandler == kODNULL)
- {
- DebugStr ("\pEXTN_InstallCACanvasUpdatedHandler - NULL handler routines!");
- }
-
- fCACanvasUpdatedHandler = theHandler;
-
- }
-
- //--------------------------------------------------------------------
- void CAProxyPart::EXTN_GetLastEventInfo( Environment* ev,
- ODEventInfo* eventInfo)
- {
- ODUnused( ev );
-
- *eventInfo = this->fLastEventInfo;
- this->fLastEventInfo.embeddedFrame = kODNULL;
- this->fLastEventInfo.embeddedFacet = kODNULL;
-
- }
-
-